From: Jonas Ã…dahl Date: Mon, 4 Sep 2017 06:37:45 +0000 (+0800) Subject: boxpointer: If available, use source actor for constraining X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~76 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=96e14dcbe76cb2b7fc2dcb972a97575a7cb4a724;p=gnome-shell.git boxpointer: If available, use source actor for constraining If a source actor is set, use that for determining the arrow side (i.e. whether the BoxPointer widget should expand in a certain direction). This is better because it ensures that the popup is displayed on the same monitor as the widget it originates from. Without this, entering text with a vertically aligned input method close to the bottom of a monitor would expand the BoxPointer downwards on the monitor beneath it, instead of upwards, which is what one would expect. https://bugzilla.gnome.org/show_bug.cgi?id=786886 --- diff --git a/js/ui/boxpointer.js b/js/ui/boxpointer.js index 091ae157f..4527b4d9c 100644 --- a/js/ui/boxpointer.js +++ b/js/ui/boxpointer.js @@ -587,7 +587,10 @@ var BoxPointer = new Lang.Class({ _calculateArrowSide: function(arrowSide) { let sourceAllocation = Shell.util_get_transformed_allocation(this._sourceActor); let [minWidth, minHeight, boxWidth, boxHeight] = this._container.get_preferred_size(); - let monitor = Main.layoutManager.findMonitorForActor(this.actor); + let monitorActor = this.sourceActor; + if (!monitorActor) + monitorActor = this.actor; + let monitor = Main.layoutManager.findMonitorForActor(monitorActor); switch (arrowSide) { case St.Side.TOP: